;(function($){
    /**
     * 复制分页组件，进行优化，避免影响以前的功能
     * @data 2021-01-11
     * @description
     *      添加获取所有数据方法 getAllData()
     *      添加跨页多选，在一页上还是以前的机制，在跨页上默认是多选
     *      添加选中回显
     */
    $.widget("tempo.mine_columnselect_page",{
		options:{
			width:270,
			height:300,
			hideToolBar:false,//是否隐藏选择按钮工具条
			data:[],
			showRadios:[],// 可选参数，显示指定类型的单选按钮，如只显示字符，选项有all,string,number,timestamp,text,tempo_vector
			udfSearch:function(itemData){
				// 可选参数，若需要在类型过滤的同时，再添加其他过滤条件，可覆盖该属性,thisEle为待选列表中的一项
				// 返回true（满足条件）或false（不满足条件）
				return true;
			},
			placeholder:TempoUtils.locale("mine.sousuziduanming"), // 搜索框提示语
			pagesize:8,
			pagination:false,
			//存储不满足搜索要求的，要删除的字段
			noSearchResult:[],
            // 储存搜索到的数据
            searchResult: [],
            //储存原始的数据
            oldData: []
		},
		_create:function(){
		    //将数据存入到原始数据里
            this.options.oldData = this.options.data;
			this.element.addClass("tempo-columnselect").css({
				'width':this.options.width,
				'height':this.options.height
				});
			
			var columnSelectLeftDiv = $('<div/>',{"class":"tempo-columnselect-left"}).appendTo(this.element);
			var parentDiv = $('<div/>').addClass("tempo-columnselect-datatype");
			// 第一个单选按钮组件，初始化完成后，调用click事件选中第一个，不能用checked属性设置选中，有浏览兼容问题
			var firstRaio;
			// 若showRadios的长度为空，则显示全部
			// 记录radio个数，若超过3个，则会换行，需要修改tempo-mine-column-field的高度
			var radioNum = 0;
			if (this.options.showRadios.length == 0){
				firstRaio = this._appendTypeRadio('all',parentDiv);
				this._appendTypeRadio('string',parentDiv);
				this._appendTypeRadio('number',parentDiv);
				parentDiv.append($('<br/>'));
				this._appendTypeRadio('timestamp',parentDiv);
				this._appendTypeRadio('text',parentDiv);
				radioNum = 5;
			} else {
				for (var i=0;i<this.options.showRadios.length;i++){
					//日期和日期时间 统一用日期时间处理
					if(this.options.showRadios[i]=="datetime"){
						continue;
					}
					var radioEle = this._appendTypeRadio(this.options.showRadios[i],parentDiv);
					if (i == 2) {
						parentDiv.append($('<br/>'));
					}
					if (i == 0){
						firstRaio = radioEle;
					}
				}
				radioNum = this.options.showRadios.length;
			}
			
			parentDiv.appendTo(columnSelectLeftDiv);
		
			var search=$('<div/>').addClass("tempo-column-search")
			.appendTo(columnSelectLeftDiv);
			
			var sourceLayout = $('<div/>').addClass("tempo-mine-column-field").appendTo(columnSelectLeftDiv);
			// 判断是否是分页，是否传入数据
			if (this.options.pagination){
				search.searchbar({
					placeholder:this.options.placeholder, // 搜索框提示语
					auto: true, //true时，输入框值改变自动搜索,用户输入数据1秒后搜索 false时，需点击搜索按钮进行搜索
					onSearch: function(data){
                        // 现将上一次搜索到的数据清空
                        thisObj.options.searchResult = [];
                        // 遍历添加
                        var noSearchResultLen = thisObj.options.noSearchResult.length;
                        for (var i = 0; i < noSearchResultLen; i++ ) {
                            thisObj.options.data.push(thisObj.options.noSearchResult[i]);
                        }
                        // 将原先不满足搜索的结果集置空
                        thisObj.options.noSearchResult = [];
                        thisObj.options.data.forEach(
                            function(oneData) {
                                thisObj._combineSearchWithPage(oneData);
                            }
                        );
                        // 不满足搜索的结果集长度
                        var len = thisObj.options.noSearchResult.length;
                        // 没有结果集直接返回
                        // if (len == 0) return;
                        // 将搜索到的内容设置为显示内容
                        thisObj.options.data = thisObj.options.searchResult;
                        var id = thisObj.element.find("input[name='dataselect']:checked").attr("id");
                        thisObj._changePage(1,id);
					}
				});
			}
			else{
				search.searchbar({
					placeholder:this.options.placeholder, // 搜索框提示语
					auto:true, //true时，输入框值改变自动搜索,用户输入数据1秒后搜索 false时，需点击搜索按钮进行搜索
					onSearch:function(data){
						sourceLayout.find("li").each(
							function() {
								thisObj._combineSearch($(this));
							});
					}
				});
			}

			var data = this.options.data;
			var ul = $('<ul/>').addClass("tempo-mine-column-list").
						attr("id","_column_container").appendTo(sourceLayout);
			this.options.ul = ul;
			if(this.options.pagination){
				var maxPage = this.options.data.length/this.options.pagesize ;
				if(maxPage > parseInt(maxPage)){
					maxPage = parseInt(maxPage)+1;
				}
				sourceLayout.append("<div id='columnPage' style='text-align: center;color: #888;'>" +
					"<span >共</span>" +
					"<span id='pageCount'>"+this.options.data.length+"</span>" +
					"<span>条</span>" +
					"<span id='left' style='margin: 0 10px;cursor: pointer;'>&lt;</span>"+
					"<span id='pageNum'>1</span>" +
					"<span>/</span>"+
					"<span id='maxPage'>"+maxPage+"</span>"+
					"<span id='right' style='margin: 0 10px;cursor: pointer;'>&gt;</span></div>")

				sourceLayout.find("#left").unbind("click").bind("click",function () {
					var index = parseInt(thisObj.element.find("#pageNum").text());
					if(index >1){
						var id = thisObj.element.find("input[name='dataselect']:checked").attr("id");
						thisObj._changePage(index-1,id);
					}
				})
				sourceLayout.find("#right").unbind("click").bind("click",function () {
					var index = parseInt(thisObj.element.find("#pageNum").text());
					//获取当前最大页数 当前分页栏的数据总数/每页个数
					var maxPage = thisObj.element.find("#pageCount").text()/thisObj.options.pagesize ;
					if(maxPage > parseInt(maxPage)){
						maxPage = parseInt(maxPage)+1;
					}
					if(index < maxPage){
						var id = thisObj.element.find("input[name='dataselect']:checked").attr("id");
						thisObj._changePage(index+1,id);
					}
				})
			}else{
				if (data.length > 0) {
					for (var i=0;i<data.length;i++) {
						$("<li/>").data("data",data[i]).html(data[i].desc).attr("title", data[i].name?data[i].name:data[i].desc).appendTo(ul);
					}
				}
			}
			var thisObj=this;
			var addToolBar = function (){
				$('<div/>').addClass("tempo-columnselect-dataselect")
				.append($("<div class='tempo-columnselect-allselect'><button id='allselect' name='columnselect'></button></div>"))
				.append($("<div class='tempo-columnselect-right-remove'><button id='tempo-columnselect-right-remove-btn'></button></div>"))
				.append($("<div class='tempo-columnselect-left-remove'><button id='tempo-columnselect-left-remove-btn'></button></div>"))
				.append($("<div class='tempo-columnselect-reverseselect'><button id='reverseselect' name='columnselect'></button></div>"))
				.appendTo(thisObj.element);
			}
			
			if(!this.options.hideToolBar){
				addToolBar();
			} else {
				// 不添加工具按钮，则设置宽度占满
				columnSelectLeftDiv.css({"width":"100%"});
			}
			
			this.element.find('input[name=dataselect]').unbind('click').bind("click",function(e) {
			    // 将搜索不到的数据先添加上去
                var noSearchResultLen = thisObj.options.noSearchResult.length;
                for ( var i = 0; i < noSearchResultLen; i++ ) {
                    thisObj.options.data.push(thisObj.options.noSearchResult[i]);
                }
                // 清空搜索不到的数据
                thisObj.options.noSearchResult = [];
				$(this).attr('checked',true);
				if(thisObj.options.pagination){
					var id = $(this).attr("id");
					thisObj._changePage(1,id);
					return;
				}else{
					ul.find("li").each(function() {
						thisObj._combineSearch($(this));
					});
				}
			});
			var id = this.element.find("input[name='dataselect']:checked").attr("id");
			this._changePage(1,id);
			this._bindEvent(ul);
			// 字段的选中事件
			sourceLayout.unbind('click').bind('click',function() {
                // 选中加class  tempo-mine-column-backgroundcolor


			});
			// 高度修改，先计算出list的外边距
			var outer = sourceLayout.outerHeight(true) - sourceLayout.height();
			sourceLayout.height(this.element.innerHeight() - this.element.find('.tempo-columnselect-datatype').outerHeight(true)
						- this.element.find('.tempo-column-search').outerHeight(true) - outer - 5);
			// 选中第一个单选按钮
			firstRaio.click();
		},
		_setOption:function(key,val){
		},
		_bindEvent:function(ul) {
			ul.find('li').unbind('mousedown').bind('mousedown',function(e) {
				var e = e||window.event;
				e.preventDefault();
				var that = $(this);
				if (e.button == 0) {
					if (e.ctrlKey) {
						that.toggleClass('tempo-mine-column-backgroundcolor');
						// 修改选中字段的选中状态字段
						that.data("data").isSelected = that.hasClass('tempo-mine-column-backgroundcolor');
					} else if (e.shiftKey) {
						var selectedIndex=-1;
						var maxInternal=Number.MIN_VALUE;
						that.siblings().each(function() {
							if ($(this).hasClass('tempo-mine-column-backgroundcolor')) {
								if (Math.abs(that.index()-$(this).index()) > maxInternal) {
									maxInternal = Math.abs(that.index()-$(this).index());
									selectedIndex = $(this).index();
								}
							}
						});
						
						if (selectedIndex != -1) {
							var startIndex;
							var endIndex;
							if (selectedIndex < that.index()) {
								startIndex = selectedIndex;
								endIndex = that.index();
							} else {
								startIndex = that.index();
								endIndex = selectedIndex;
							}
							ul.find('li').each(function(i){
								if (i >=startIndex &&　i <=  endIndex) {
									$(this).addClass('tempo-mine-column-backgroundcolor');
									// 修改选中字段的选中状态字段
									$(this).data("data").isSelected = true;
								}
							});
		
						} else {
							startIndex = 0;
							endIndex = that.index();
							ul.find('li').each(function(i){
								if (i >=startIndex &&　i <=  endIndex) {
									$(this).addClass('tempo-mine-column-backgroundcolor');
									// 修改选中字段的选中状态字段
									$(this).data("data").isSelected = true;
								}
							});
						}
					} else {
						that.addClass('tempo-mine-column-backgroundcolor');
						// 修改选中字段的选中状态字段
						that.data("data").isSelected = that.hasClass('tempo-mine-column-backgroundcolor');
						that.siblings().removeClass('tempo-mine-column-backgroundcolor');
						// 移除其他的选中状态的字段，可能是一个，也可能是多个
						var otherLi = that.siblings();
						var otherLiLen = otherLi.length;
						for (var i=0; i<otherLiLen; i++) {
							// 修改状态
							otherLi.eq(i).data("data").isSelected = false;
						}

					}
				}
			});
		},
		_changePage:function(index,id){
			var thisObj = this;
			var ul = this.options.ul;
			ul.empty();
			var allData = this.options.data;
			// 清空搜索到的数据
            this.options.searchResult = [];
			// 遍历删选搜索到的数据和搜索不到的数据
            var allDataLen = allData.length;
            for (var i = 0; i < allDataLen; i++ ) {
                thisObj.valdate(allData[i], id);
            }
            // 将搜索到的数据，替换总数据
            thisObj.options.data = thisObj.options.searchResult;
			if(this.options.pagination){
				if (thisObj.options.data.length > 0) {
                    var data = thisObj.options.data;
					var maxPage = data.length/this.options.pagesize ;
					if(maxPage > parseInt(maxPage)){
						maxPage = parseInt(maxPage)+1;
					}
					this.element.find("#pageCount").text(data.length)
					this.element.find("#maxPage").text(maxPage);
					this.element.find("#pageNum").text(index);
					for (var i=this.options.pagesize*(index-1);i<data.length&& i < this.options.pagesize*(index);i++) {
						var $li = $("<li/>").data("data",data[i]).html(data[i].desc).attr("title", data[i].name?data[i].name:data[i].desc).appendTo(ul);
						if (data[i].isSelected+"" == "true") $li.addClass("tempo-mine-column-backgroundcolor");
					}
				}else{
					this.element.find("#pageCount").text(0)
					this.element.find("#maxPage").text(0);
					this.element.find("#pageNum").text(1);
				}
			}else{
				if (allData.length > 0) {
					for (var i=0;i<allData.length;i++) {
						$("<li/>").data("data",allData[i]).html(allData[i].desc).attr("title", allData[i].name?allData[i].name:allData[i].desc).appendTo(ul);
					}
					this.element.find("input[name='dataselect']:checked").click();
				}
			}
			this._bindEvent(ul);
		},
		addRowData:function(data, needBindAll) {
			var ul = this.options.ul;
			if(data.length && data.length >0){
				for(var j = 0 ; j < data.length;j++){
					if(data[j].status&&data[j].status.indexOf("tempo-mine-grid-columns-status-false")!=-1){
						data.splice(j,1);
						j--;
						continue;
					}
					for(var i =0;i<this.options.data.length;i++){
						if(data[j].desc == this.options.data[i].desc){
							data.splice(j,1);
							j--;
							break;
						}
					}
				}
				if(data.length >0){
					this.options.data=this.options.data.concat(data);
				}
			}else{
				if(data.status&&data.status.indexOf("tempo-mine-grid-columns-status-false")!=-1){
					data = null;
				}else{
					for(var i =0;i<this.options.data.length;i++){
						if(data.desc == this.options.data[i].desc){
							data = null;
							break;
						}
					}
				}
				if(data != null){
					this.options.data=this.options.data.concat(data);
				}
			}
			var id = this.element.find("input[name='dataselect']:checked").attr("id");
			this._changePage(1,id);
			// 未设置needBindAll，默认绑定数据
			if (undefined == needBindAll || null == needBindAll){
				this._bindEvent(ul);
			}
		},
		removeRowData:function(values){
			var data = this.options.data;
			for(var j = 0 ; j < values.length;j++){
				for(var i = 0 ; i < data.length ; i ++){
					if(data[i].desc == values[j].desc){
						data.splice(i,1);
						i--;
						break;
					}
				}
			}
			var id = this.element.find("input[name='dataselect']:checked").attr("id");
			this._changePage(1,id);
		},
		bindAllDataEvent:function(){
			// 给所有数据绑定事件
			this._bindEvent(this.element.find(".tempo-mine-column-list"));
		},
		_appendTypeRadio:function(radioId,parentDiv) {
			// 添加radio到指定div上，并返回radio
			var radioLabel = "";
			var radioLabelTitle = "";
			if (radioId == "string"){
				radioLabel = TempoUtils.locale('mine.character');
				radioLabelTitle = TempoUtils.locale('mine.charactertitle');
			} else if (radioId == "timestamp"){
				radioLabel = TempoUtils.locale('mine.date');
				radioLabelTitle = TempoUtils.locale('mine.datetitle');
			} else if (radioId == "tempo_vector"){
				radioLabel = TempoUtils.locale('mine.meta_fields_label_tempo_vector');
				radioLabelTitle = TempoUtils.locale('mine.meta_fields_label_tempo_vectortitle');
			} else {
				radioLabel = TempoUtils.locale('mine.'+radioId);
				radioLabelTitle = TempoUtils.locale('mine.'+radioId+'title');
			}
			var radioEle = $('<input/>',{
				'type':'radio',
				'name':'dataselect',
				'class':"tempo-radio",
				'id':radioId,
			});
			var labelObj = $('<label for="'+radioId+'">'+radioLabel+'</label>');
			labelObj.attr("title",radioLabelTitle);
			parentDiv.append(radioEle).append(labelObj);
			return radioEle;
		},
		valdate:function(data,id){
		    // 如果id为undefined
		    if (!id) {
		        //保存到搜索到的数据集中
                this.options.searchResult.push(data);
                return ;
            }
			var flag = true;
			var searchText = this.element.find(".tempo-searchbar-searthinput").val().toUpperCase();
			var type = data.type;
			var showRadios = this.options.showRadios;
			if (searchText && searchText != "" && data.desc.toUpperCase().indexOf(searchText) == -1){
				// 校验当前内容是否与搜索框内容（不为空串）匹配
                // 存储到搜索不到的数据集里
                this.options.noSearchResult.push(data);
                return;
			} else if (id == 'all') {
				if (showRadios.length == 0){
					// 若自定义显示类型为空，且当前显示的类型为全部类型，则过滤向量类型，显示其他所有类型
					if (TempoMineMetaUtils.isVector(type.toUpperCase())){
						// 向量类型默认隐藏
                        this.options.noSearchResult.push(data);
                        return ;
					}
				} else {
					// 否则，判断当前类型是否在当前设置的显示类型中
					var findFlag = false;
					for (var i=0;i<showRadios.length;i++){
						if (showRadios[i].toUpperCase() == type.toUpperCase()){
							findFlag = true;
							break;
						} else if (showRadios[i] == "number" && TempoMineMetaUtils.isNumber(type.toUpperCase())){
							findFlag = true;
							break;
						}
					}
					if (!findFlag){
                        // 存储到搜索不到的数据集里
                        this.options.noSearchResult.push(data);
                        return;
					}
				}
			} else if (id == 'number') {
				if (!TempoMineMetaUtils.isNumber(type.toUpperCase())) {
                    // 存储到搜索不到的数据集里
                    this.options.noSearchResult.push(data);
                    return;
				}
			}else if(id == 'timestamp'){//日期不区分日期和日期时间
				if(type.toUpperCase() !=  id.toUpperCase()&&type.toUpperCase()!="DATETIME"){
					this.options.noSearchResult.push(data);
					return;
				}
			}else {
				if (type.toUpperCase() != id.toUpperCase()) {
                    // 存储到搜索不到的数据集里
                    this.options.noSearchResult.push(data);
                    return;
				}
			}
            // 存储到搜索不到的数据集里
            this.options.searchResult.push(data);
            return;
		},
		_combineSearch:function(columnSelectEle){
			var id = this.element.find("input[name='dataselect']:checked").attr("id");
			// 类型单选与查询框条件进行组合查询
			var type = columnSelectEle.data("data").type || "";
			if(type && type == "DATETIME"){
				type = "TIMESTAMP";
			}
        	var searchText = this.element.find(".tempo-searchbar-searthinput").val().toUpperCase();

        	var thisText = columnSelectEle.html().toUpperCase();
        	var showRadios = this.options.showRadios;
        	// 若自定义判断方法存在，且当前项不满足条件，则设置为不可见并返回
        	if (!this.options.udfSearch(columnSelectEle.data("data"))){
        		columnSelectEle.addClass("nodisplay");
        		return;
        	}
        	if (searchText && searchText != "" && thisText.indexOf(searchText) == -1){
        		// 校验当前内容是否与搜索框内容（不为空串）匹配
        		columnSelectEle.addClass("nodisplay");
        	} else if (id == 'all') {
        		if (showRadios.length == 0){
        			// 若自定义显示类型为空，且当前显示的类型为全部类型，则过滤向量类型，显示其他所有类型
        			if (TempoMineMetaUtils.isVector(type.toUpperCase())){
        				// 向量类型默认隐藏
        				columnSelectEle.addClass("nodisplay");
        			} else {
        				columnSelectEle.removeClass("nodisplay");
        			}
        		} else {
        			// 否则，判断当前类型是否在当前设置的显示类型中
        			var findFlag = false;
        			for (var i=0;i<showRadios.length;i++){
        				if (showRadios[i].toUpperCase() == type.toUpperCase()){
        					columnSelectEle.removeClass("nodisplay");
        					findFlag = true;
        					break;
        				} else if (showRadios[i] == "number" && TempoMineMetaUtils.isNumber(type.toUpperCase())){
        					columnSelectEle.removeClass("nodisplay");
        					findFlag = true;
        					break;
        				}
        			}
        			if (!findFlag){
        				columnSelectEle.addClass("nodisplay");
        			}
        		}
        	} else if (id == 'number') {
               	if (TempoMineMetaUtils.isNumber(type.toUpperCase())) {
               		columnSelectEle.removeClass("nodisplay");
            	} else {
            		columnSelectEle.addClass("nodisplay");
            	}
        	}else {
            	if (type.toUpperCase() == id.toUpperCase()) {
            		columnSelectEle.removeClass("nodisplay");
            	} else {
            		columnSelectEle.addClass("nodisplay")
            	}
        	}
		},
		/**
		 * 分页搜索框 判断单行数据是否符合要求
		 * @param columnSelectEle 当前一条数据
		 * @private
		 */
        _combineSearchWithPage:function(columnSelectEle){
            var id = this.element.find("input[name='dataselect']:checked").attr("id");
            // 类型单选与查询框条件进行组合查询
            var type = columnSelectEle.type || "";
            if(type && type == "DATETIME"){
                type = "TIMESTAMP";
            }
            var searchText = this.element.find(".tempo-searchbar-searthinput").val().toUpperCase();

            var thisText = columnSelectEle.desc.toUpperCase();
            var showRadios = this.options.showRadios;
            // 若自定义判断方法存在，且当前项不满足条件，存储在不满足搜索集里
            if (!this.options.udfSearch(columnSelectEle)){
                this.options.noSearchResult.push(columnSelectEle);
                return;
            }
            // 校验当前内容是否与搜索框内容（不为空串）匹配
            if (searchText && searchText != "" && thisText.indexOf(searchText) == -1){
                // 不匹配 存储在不满足搜索集里
                this.options.noSearchResult.push(columnSelectEle);
                return;
            } else if (id == 'all') {
                if (showRadios.length == 0){
                    // 若自定义显示类型为空，且当前显示的类型为全部类型，则过滤向量类型，显示其他所有类型
                    if (TempoMineMetaUtils.isVector(type.toUpperCase())){
                        // 向量类型默认删除 存储在不满足搜索集里
                        this.options.noSearchResult.push(columnSelectEle);
                        return;
                    }
                } else {
                    // 否则，判断当前类型是否在当前设置的显示类型中
                    var findFlag = false;
                    for (var i=0;i<showRadios.length;i++){
                        // 判断type类型是不是属于number型
                        if (showRadios[i] == "number" && TempoMineMetaUtils.isNumber(type.toUpperCase())){
                            // 属于number型 存储在不满足搜索集里
                            findFlag = true;
                            break;
                            // 判断type类型是否属于其他类型
                        }else if (showRadios[i].toUpperCase() == type.toUpperCase()){
                            // 属于
                            findFlag = true;
                            break;
                        }
                    }
                    if (!findFlag){
                        // 不匹配所允许的类型
                        this.options.noSearchResult.push(columnSelectEle);
                        return;
                    }
                }
            } else if (id == 'number') {
                if (!TempoMineMetaUtils.isNumber(type.toUpperCase())) {
                    // type不属于number类型
                    this.options.noSearchResult.push(columnSelectEle);
                    return;
                }
            }else {
                if (type.toUpperCase() != id.toUpperCase()) {
                    // type与所选类型不匹配
                    this.options.noSearchResult.push(columnSelectEle);
                    return;
                }
            }
            // 将满足要求的存储起来
            this.options.searchResult.push(columnSelectEle);
        },
		/**
		 * 获取所有数据
		 */
		getAllData : function(){
        	return this.options.data;
		},
	});
})(jQuery)